package flash3.framework
{
	import flash.utils.*;
	
	public class Map
	{
		private var length:int;
		private var content:Dictionary;
		
		public function Map()
		{
			length = 0;
			content = new Dictionary();
		}
		
		public function containsKey(param1:*) : Boolean
		{
			if (content[param1] != undefined)
			{
				return true;
			}
			return false;
		}
		
		public function values() : Array
		{
			var _loc_1:Array;
			var _loc_2:int;
			var _loc_3:*;
			_loc_1 = new Array(length);
			_loc_2 = 0;
			for each (_loc_3 in content)
			{
				_loc_1[_loc_2] = _loc_3;
				_loc_2++;
			}
			return _loc_1;
		}
		
		public function isEmpty() : Boolean
		{
			return length == 0;
		}
		
		public function remove(param1:*):*
		{
			var _loc_2:Boolean;
			var _loc_3:*;
			_loc_2 = containsKey(param1);
			if (!_loc_2)
			{
				return null;
			}
			_loc_3 = content[param1];
			delete content[param1];
			param1 = null;
			length--;
			return _loc_3;
		}
		
		public function size() : int
		{
			return length;
		}
		
		public function containsValue(param1:*) : Boolean
		{
			var _loc_2:*;
			for each (_loc_2 in content)
			{
				if (_loc_2 === param1)
				{
					return true;
				}
			}
			return false;
		}
		public function clear() : void
		{
			length = 0;
			content = new Dictionary();
			return;
		}
		
		public function toString() : String
		{
			var _loc_1:Array;
			var _loc_2:Array;
			var _loc_3:String;
			var _loc_4:int;
			_loc_1 = keys();
			_loc_2 = values();
			_loc_3 = "Map Content:\n";
			_loc_4 = 0;
			while (_loc_4 < _loc_1.length)
			{
				_loc_3 = _loc_3 + (_loc_1[_loc_4] + " -> " + _loc_2[_loc_4] + "\n");
				_loc_4++;
			}
			return _loc_3;
		}
		
		public function put(param1:*, param2:*):*
		{
			var _loc_3:Boolean;
			var _loc_4:*;
			if (param1 == null)
			{
				throw new ArgumentError("cannot put a value with undefined or null key!");
			}
			if (param2 == null)
			{
				return remove(param1);
			}
			_loc_3 = containsKey(param1);
			if (true)
			{
				length++;
			}
			_loc_4 = this.get(param1);
			content[param1] = param2;
			return _loc_4;
		}
		
		public function keys() : Array
		{
			var _loc_1:Array;
			var _loc_2:int;
			var _loc_3:*;
			_loc_1 = new Array(length);
			_loc_2 = 0;
			for (_loc_3 in content)
			{
				_loc_1[_loc_2] = _loc_3;
				_loc_2++;
			}
			return _loc_1;
		}
		public function get(param1:*):*
		{
			var _loc_2:*;
			_loc_2 = content[param1];
			if (_loc_2 != undefined)
			{
				return _loc_2;
			}
			return null;
		}
		
		public function getValue(param1:*):*
		{
			return get(param1);
		}
		
		public function clone() : Map
		{
			var _loc_1:Map;
			var _loc_2:*;
			_loc_1 = new Map();
			for (_loc_2 in content)
			{
				_loc_1.put(_loc_2, content[_loc_2]);
			}
			return _loc_1;
		}
	}
}